熵与短码字

Entropy And Short Codes

(如果你不熟悉贝叶斯推断(Bayesian inference),现在也许正是去读一读贝叶斯定理的直观解释的好时机。)

假设你有一个系统 X,它等概率地处于 8 种可能状态中的任意一种:

{X1, X2, X3, X4, X5, X6, X7, X8}。

有一个极其普遍的量——在物理学、数学,甚至生物学中都无处不在——称为;而 X 的熵是 3 比特。这意味着,平均而言,我们需要问 3 个是/否问题,才能弄清 X 的取值。比如说,有人可以用下面这套编码来告诉我们 X 的取值:

| X1 : 001 | X2 : 010 | X3 : 011 | X4 : 100 |

||

| X5 : 101 | X6 : 110 | X7 : 111 | X8 : 000. |

因此,如果我问「第一个符号是 1 吗?」并听到「是」,然后问「第二个符号是 1 吗?」并听到「否」,再问「第三个符号是 1 吗?」并听到「否」,我就会知道 X 处于状态 4。

现在假设系统 Y 有 4 种可能状态,其概率如下:

| Y1 : 1/2(50%) | Y2 : 1/4(25%) |

||

| Y3 : 1/8(12.5%) | Y4 : 1/8(12.5%)。 |

那么 Y 的熵将是 1.75 比特,这意味着平均只需问 1.75 个是/否问题,就能弄清它的取值。

谈论「问一个又四分之三的问题」是什么意思?想象一下,我们用下面这套编码来标记 Y 的各个状态:

| Y1 : 1 | Y2 : 01 | Y3 : 001 | Y4 : 000. |

||

首先你问:「第一个符号是 1 吗?」如果答案是「是」,就结束了:Y 处于状态 1。情况有一半时间如此,所以在 50% 的情况下,只需 1 个是/否问题就能确定 Y 的状态。

假如相反,答案是「否」。那么你就问:「第二个符号是 1 吗?」如果答案是「是」,就结束了:Y 处于状态 2。系统 Y 以 1/4 的概率处于状态 2;而每当 Y 处于状态 2 时,我们都用两个是/否问题发现这一事实,所以在 25% 的情况下,需要 2 个问题才能确定 Y 的状态。

如果连续两次的答案都是「否」,你就问「第三个符号是 1 吗?」如果「是」,就结束了,Y 处于状态 3;如果「否」,就结束了,Y 处于状态 4。在 Y 处于状态 3 的那 1/8 的时间里,需要 3 个问题;在 Y 处于状态 4 的那 1/8 的时间里,也需要 3 个问题。

(1/2 × 1) + (1/4 × 2) + (1/8 × 3) + (1/8 × 3)

= 0.5 + 0.5 + 0.375 + 0.375

= 1.75.

系统 S 的熵 H(S) 的一般公式,是对所有 Si 求和:−P(Si)log2(P(Si))。

例如,1/8 的对数(以 2 为底)是 −3。因此 −(1/8 × −3) = 0.375 就是状态 S4 对总熵的贡献:有 1/8 的时间,我们必须问 3 个问题。

你并不总能为某个系统设计出一套完美的编码,但如果你需要在一条消息里告诉别人任意多份 S 副本的状态,你就能无限逼近完美编码。(想要一种简单的方法,可以在 Google 上搜索「arithmetic coding」。)

现在,你也许会问:「为什么不把 Y4 编成 10,而不是 000?那样不是能让我们更快地传输消息吗?」

但如果你把 Y4 编成 10,那么当有人对问题「第一个符号是 1 吗?」回答「是」时,你还无法确定系统处于 Y1(1)还是 Y4(10)。事实上,如果你这样改编码,整个系统都会崩溃——因为当你听到「1001」时,你不知道它表示「Y4,后接 Y2」还是「Y1,后接 Y3」。

其寓意是:短码字是一种守恒资源

设计一套好编码——一套尽可能紧凑地传递消息的编码——关键在于把短码字留给你经常需要说的东西,把更长的码字用于你不那么常说的东西。

当你把这门技艺推到极限时,你用来描述某件事所需的消息长度,会与它的概率完全一致,或几乎完全一致。这就是把奥卡姆剃刀(Occam’s Razor)形式化为最小描述长度(Minimum Description Length)或最小消息长度(Minimum Message Length)的理论。

因此,就连我们给词语贴上的标签也并非完全随意。我们赋予概念的声音,可以更好也可以更糟,可以更明智也可以更愚蠢。即便撇开对常见用法的考量也是如此!

我说这些,是因为「你可以随便怎么 X」这种想法,是学习如何明智地 X 的巨大障碍。「这是个自由的国家;我有坚持自己观点的权利」阻碍了求真之术。「我可以随便怎么给一个词下定义」阻碍了在现实的关节处下刀这门技艺。甚至连听起来很有道理的「我们给词语贴上的标签是任意的」也会阻碍我们对紧凑性的觉察。韵律亦然——托尔金曾指出,「cellar door」这句话的声音多么优美;要像托尔金那样使用语言,就需要具备这种觉察。

词语的长度在语言的认知科学中也扮演着不可忽视的角色:

想想这些短语:「recliner」、「chair」和「furniture」。Recliner 是比 chair 更具体的范畴;furniture 是比 chair 更一般的范畴。但绝大多数 chair 有一种共同用途——你用同一类运动动作坐到它们上面,也出于同一类目的坐在上面(在你吃饭、阅读、打字或休息时,把你的重量从脚上转移开)。Recliner 并不偏离这一主题。另一方面,「furniture」则包含诸如床和桌子之类的东西,它们有不同的用途,并且会从 chair 引出不同的运动功能。

在认知心理学术语中,「chair」是一个基本层级范畴(basic-level category)。

人们倾向于在范畴化的基本层级上说话,并且大概也在这个层级上思考——也就是说,他们会把边界画在「chairs」周围,而不是更具体的「recliner」,或更一般的「furniture」。人们更可能说「你可以坐在那把 chair 上」,而不是「你可以坐在那把 recliner 上」或「你可以坐在那件 furniture 上」。

而「chair」这个词所含的音节数少于「recliner」和「furniture」中的任意一个,也绝非巧合。一般而言,基本层级范畴往往有较短的名字;而名字较短的名词往往指向基本层级范畴。当然,这不是一条完美的规则,但确实是一种明确的倾向。高频使用往往伴随短词;短词也往往伴随高频使用。

或者用道格拉斯·霍夫施塔特(Douglas Hofstadter)的话说:英语之所以用「the」来表示「the」,用「antidisestablishmentarianism」来表示「antidisestablishmentarianism」,而不是反过来,是有原因的。